<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Punycode</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Punycode"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Punycode rootpage-Punycode skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Punycode</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<p><b>Punycode</b> is a representation of <a href="Unicode" title="Unicode">Unicode</a> with the limited <a href="ASCII" title="ASCII">ASCII</a> character subset used for Internet <a href="Hostname" title="Hostname">hostnames</a>. Using Punycode, host names containing Unicode characters are transcoded to a subset of ASCII consisting of letters, digits, and hyphens, which is called the letter–digit–hyphen (LDH) subset. For example, the <a href="German_language" title="German language">German</a> <i><a href="M%C3%BCnchen" class="mw-redirect" title="München">München</a></i> (<a href="English_language" title="English language">English</a>: <a href="Munich" title="Munich">Munich</a>) is encoded as <i>Mnchen-3ya</i>.
</p><p>While the <a href="Domain_Name_System" title="Domain Name System">Domain Name System</a> (DNS) technically supports arbitrary sequences of octets in domain name labels, the DNS standards recommend the use of the LDH subset of ASCII conventionally used for host names, and require that string comparisons between DNS domain names should be case-insensitive. The Punycode syntax is a method of encoding strings containing Unicode characters, such as <a href="Internationalized_domain_name" title="Internationalized domain name">internationalized domain names</a> (IDNA), into the LDH subset of ASCII favored by DNS. It is specified in <a href="IETF" class="mw-redirect" title="IETF">IETF</a> <a href="Request_for_Comments" title="Request for Comments">Request for Comments</a> 3492.<sup id="cite_ref-rfc3492_1-0" class="reference"><a href="#cite_note-rfc3492-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Origin_of_the_name">Origin of the name</h2></div>
<p>The RFC author, Adam Costello, is reported to have written:
</p>
<blockquote>
<p>Why “Punycode”? It rhymes with Unicode and is intended to encode Unicode strings. It is “puny” in three senses: The repertoire of characters used in the encoded strings is small, the encoded strings are short, and the implementation is small.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
</blockquote>
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p>As stated in RFC 3492, "Punycode is an instance of a more general algorithm called <i>Bootstring</i>, which allows strings composed from a small set of 'basic' code points to uniquely represent any string of code points drawn from a larger set." Punycode defines parameters for the general Bootstring algorithm to match the characteristics of Unicode text. This section demonstrates the procedure for Punycode encoding, using as an example the <a href="German_language" title="German language">German</a> string "bücher" (<a href="English_language" title="English language">English</a>: <i>books</i>), which is translated into the label "bcher-kva".
</p><p>To make the encoding and decoding algorithms simple, no attempt has been made to prevent some encoded values from encoding inadmissible Unicode values: however, these should be checked for and detected during decoding.
</p><p>Punycode is designed to work across all scripts, and to be self-optimizing by attempting to adapt to the character set ranges within the string as it operates. It is optimized for the case where the string is composed of zero or more ASCII characters and in addition characters from only one other script system, but will cope with any arbitrary Unicode string. Note that for DNS use, the domain name string is assumed to have been normalized using <a href="Nameprep" title="Nameprep">nameprep</a> and (for <a href="Top-level_domain" title="Top-level domain">top-level domains</a>) filtered against an officially registered language table before being punycoded, and that the DNS protocol sets limits on the acceptable lengths of the output Punycode string.
</p>
<div class="mw-heading mw-heading3"><h3 id="Separation_of_ASCII_characters">Separation of ASCII characters</h3></div>
<p>First, all <a href="ASCII" title="ASCII">ASCII</a> characters in the string are copied from input to output, skipping over any other characters. For example, "bücher" is copied to "bcher". If any characters were copied, i.e. if there was at least one ASCII character in the input, an ASCII hyphen is appended to the output (e.g., "bücher" → "bcher-", but "ü" → "").
</p><p>Note that hyphens are themselves ASCII characters. Thus, they can be present in the input and, if so, they will be copied to the output. This causes no ambiguity: if the output contains hyphens, the one that got added is always the last one. It marks the end of the ASCII characters.
</p>
<div class="mw-heading mw-heading3"><h3 id="Encoding_the_non-ASCII_characters">Encoding the non-ASCII characters</h3></div>
<p>The non-ASCII characters are sorted by Unicode value, lowest first (if a character occurs more than once, they are sorted by position). Each is then encoded as a single number. This single number defines both the location to insert the character at and which character to insert.
</p>
<ul><li>An <span class="texhtml mvar" style="font-style:italic;">index</span> into the result to insert the code at, starting at 0 (for insertion at the start).</li>
<li>The number of <span class="texhtml mvar" style="font-style:italic;">insertionPoints</span> (current length of the result plus one).</li>
<li>The <span class="texhtml mvar" style="font-style:italic;">reducedCodepoint</span> is the Unicode code point to insert minus 127.</li></ul>
<p>The encoded number is <span class="texhtml"><i>insertionPoints</i> × <i>reducedCodepoint</i> + <i>index</i></span>. By dividing by <span class="texhtml mvar" style="font-style:italic;">insertionPoints</span> and also getting the remainder, a decoder can determine <span class="texhtml mvar" style="font-style:italic;">reducedCodepoint</span> and <span class="texhtml mvar" style="font-style:italic;">index</span>.
</p><p>There are 6 possible insertion points for a character in the string "bcher" (including before the first character and after the last one). <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">ü</span> is Unicode code point <style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */
.mw-parser-output .monospaced{font-family:monospace,monospace}
/* end https://en.wikipedia.org/ */
</style><span class="monospaced">0xFC</span> or 252 (see <a href="Latin-1_Supplement_(Unicode_block)" class="mw-redirect" title="Latin-1 Supplement (Unicode block)">Latin-1 Supplement</a>), and the reduced code point is <span class="texhtml">252 − 127</span>, or <span class="texhtml">124</span>. The <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">ü</span> is inserted at position 1, after the <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">b</span>. Thus the encoder will add the number <span class="texhtml">6 × 124 + 1 = 745</span>, and the decoder can retrieve these by <span class="texhtml">⌊745 / 6⌋ = 124</span> and <span class="texhtml">745 mod 6 = 1</span>.
</p><p>These numbers are strictly increasing. For the second and subsequent inserted characters, the difference between the number and the previous one is written.
</p>
<div class="mw-heading mw-heading3"><h3 id="Variable-length_number_encoding">Variable-length number encoding</h3></div>
<p>The number is encoded using the letters <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">a</span> through <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">z</span> and the digits <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">0</span> through <span class="nounderlines" style="border: 1px solid var(--border-color-muted,#ddd); color: var(--color-base,#202122); background-color: var( --background-color-neutral-subtle, #fdfdfd); padding: 1px 1px;">9</span>. It is not base-36 but a more complex scheme, <a href="Numeral_system#Generalized_variable-length_integers" title="Numeral system">generalized variable-length integers</a>, which allows the numbers to be concatenated with nothing separating them.
</p><p>This is how "kva" is used to represent the code number 745:
</p>
<blockquote>
<p>A number system with <a href="Endianness#Detailed_description" title="Endianness">little-endian ordering</a> is used which allows variable-length codes without separate delimiters: a digit lower than a threshold value marks that it is the most-significant digit, hence the end of the number. The threshold value depends on the position in the number and also on previous insertions, to increase efficiency. Correspondingly the weights of the digits vary.
</p><p>In this case a number system with 36 symbols is used, with the <a href="Case_sensitivity" title="Case sensitivity">case-insensitive</a> 'a' through 'z' equal to the decimal numbers 0 through 25, and '0' through '9' equal to the decimal numbers 26 through 35. Thus "kva", corresponds to the decimal number string "10 21 0".
</p>
</blockquote>
<p>To decode this string of symbols, a sequence of thresholds will be needed, in this case it's (1, 1, 26, 26, ...).<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> The weight (or <a href="Place_value" class="mw-redirect" title="Place value">place value</a>) of the least-significant digit is always 1: 'k' (=10) with a weight of 1 equals 10. After this, the weight of the next digit depends on the first threshold: generally, for any <i>n</i>, the weight of the (<i>n</i>+1)-th digit is <i>w</i> × (36 − <i>t</i>), where <i>w</i> is the previous weight and <i>t</i> is the threshold of the <i>n</i>-th digit. So in this case, the second symbol has a place value of 36 minus the previous threshold value of 1, which equals 35. Therefore, the sum of the first two symbols 'k' (=10) and 'v' (=21) is 10 × 1 + 21 × 35. Since the second symbol is not less than its threshold value of 1, there is more to come. However, since the third symbol in this example is 'a' (=0), we may ignore calculating its weight. Therefore, "kva" represents the decimal number (10 × 1) + (21 × 35) = 745.
</p><p>Number 745 will be encoded as 10 + 21 × 35 + 0 (base 35 used for second digit, the most significant digit 0 needed as terminator), 10 → 'k', 21 → 'v', 0 → 'a', so "bücher" → "bcher-kva".
</p><p>The thresholds themselves are determined for each successive encoded character by an algorithm keeping them between 1 and 26 inclusive.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> The case can then be used to provide information about the original case of the string.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>Because special characters are sorted by their code points by encoding algorithm, for the insertion of a second special character in "bücher", the first possibility is "büücher" with code "bcher-kvaa", the second "bücüher" with code "bcher-kvab", etc. After "bücherü" with code "bcher-kvae" comes codes representing insertion of ý, the Unicode character following ü, starting with "ýbücher" with code "bcher-kvaf" (different from "übücher" coded "bcher-jvab"), etc.
</p>
<div class="mw-heading mw-heading3"><h3 id="ACE_prefix_for_internationalized_domain_names">ACE prefix for internationalized domain names</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Internationalized_domain_name" title="Internationalized domain name">Internationalized domain name</a></div>
<p>To prevent hyphens in non-international domain names from triggering a Punycode decoding, the string <code>xn--</code> is prepended to Punycode sequences in internationalized domain names. This is called ACE (ASCII Compatible Encoding).<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup>
</p><p>Thus the domain name "bücher.tld" would be represented in a URL as "xn--bcher-kva.tld".
</p>
<div class="mw-heading mw-heading2"><h2 id="Examples">Examples</h2></div>
<p>The following table shows examples of Punycode encodings for different types of input.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
</p>
<table class="wikitable">
<tbody><tr>
<th>Input</th>
<th>Punycode</th>
<th>Description
</th></tr>
<tr>
<td></td>
<td></td>
<td>The empty string.
</td></tr>
<tr>
<td><span class="monospaced">a</span></td>
<td><span class="monospaced">a-</span></td>
<td>Only <a href="ASCII" title="ASCII">ASCII</a> characters, one, lowercase.
</td></tr>
<tr>
<td><span class="monospaced">A</span></td>
<td><span class="monospaced">A-</span></td>
<td>Only ASCII characters, one, uppercase.
</td></tr>
<tr>
<td><span class="monospaced">3</span></td>
<td><span class="monospaced">3-</span></td>
<td>Only ASCII characters, one, a digit.
</td></tr>
<tr>
<td><span class="monospaced">-</span></td>
<td><span class="monospaced">--</span></td>
<td>Only ASCII characters, one, a hyphen.
</td></tr>
<tr>
<td><span class="monospaced">--</span></td>
<td><span class="monospaced">---</span></td>
<td>Only ASCII characters, two hyphens.
</td></tr>
<tr>
<td><span class="monospaced">London</span></td>
<td><span class="monospaced">London-</span></td>
<td>Only ASCII characters, more than one, no hyphens.
</td></tr>
<tr>
<td><span class="monospaced">Lloyd-Atkinson</span></td>
<td><span class="monospaced">Lloyd-Atkinson-</span></td>
<td>Only ASCII characters, one hyphen.
</td></tr>
<tr>
<td><span class="monospaced">This has spaces</span></td>
<td><span class="monospaced">This has spaces-</span></td>
<td>Only ASCII characters, with spaces.
</td></tr>
<tr>
<td><span class="monospaced">-> $1.00 <-</span></td>
<td><span class="monospaced">-> $1.00 <--</span></td>
<td>Only ASCII characters, mixed symbols.
</td></tr>
<tr>
<td><span class="monospaced">Б</span></td>
<td><span class="monospaced">d0a</span></td>
<td>No ASCII characters, one <a href="%C6%82" class="mw-redirect" title="Ƃ">Cyrillic character</a>.
</td></tr>
<tr>
<td><span class="monospaced">ü</span></td>
<td><span class="monospaced">tda</span></td>
<td>No ASCII characters, one <a href="Latin-1_Supplement" title="Latin-1 Supplement">Latin-1 Supplement</a> <a href="%C3%9C" title="Ü">character</a>.
</td></tr>
<tr>
<td><span class="monospaced">α</span></td>
<td><span class="monospaced">mxa</span></td>
<td>No ASCII characters, one <a href="Alpha" title="Alpha">Greek character</a>.
</td></tr>
<tr>
<td><span class="monospaced">例</span></td>
<td><span class="monospaced">fsq</span></td>
<td>No ASCII characters, one <a href="CJK_characters" title="CJK characters">CJK</a> character.
</td></tr>
<tr>
<td><span class="monospaced">😉</span></td>
<td><span class="monospaced">n28h</span></td>
<td>No ASCII characters, one <a href="Emoji" title="Emoji">emoji</a> character.
</td></tr>
<tr>
<td><span class="monospaced">αβγ</span></td>
<td><span class="monospaced">mxacd</span></td>
<td>No ASCII characters, more than one character.
</td></tr>
<tr>
<td><span class="monospaced">München</span></td>
<td><span class="monospaced">Mnchen-3ya</span></td>
<td>Mixed string, with one character that is not an ASCII character.
</td></tr>
<tr>
<td><span class="monospaced">Mnchen-3ya</span></td>
<td><span class="monospaced">Mnchen-3ya-</span></td>
<td>Double-encoded Punycode of "München".
</td></tr>
<tr>
<td><span class="monospaced">München-Ost</span></td>
<td><span class="monospaced">Mnchen-Ost-9db</span></td>
<td>Mixed string, with one character that is not ASCII, and a hyphen.
</td></tr>
<tr>
<td><span class="monospaced"><span class="nowrap">Bahnhof München-Ost</span></span></td>
<td><span class="monospaced">Bahnhof Mnchen-Ost-u6b</span></td>
<td>Mixed string, with one space, one hyphen, and one character that is not ASCII.
</td></tr>
<tr>
<td><span class="monospaced">abæcdöef</span></td>
<td><span class="monospaced">abcdef-qua4k</span></td>
<td>Mixed string, two non-ASCII characters.
</td></tr>
<tr>
<td><span class="monospaced">правда</span></td>
<td><span class="monospaced">80aafi6cg</span></td>
<td><a href="Russian_language" title="Russian language">Russian</a>, without ASCII.
</td></tr>
<tr>
<td><span class="monospaced">ยจฆฟคฏข</span></td>
<td><span class="monospaced">22cdfh1b8fsa</span></td>
<td><a href="Thai_language" title="Thai language">Thai</a>, without ASCII.
</td></tr>
<tr>
<td><span class="monospaced">도메인</span></td>
<td><span class="monospaced">hq1bm8jm9l</span></td>
<td><a href="Korean_language" title="Korean language">Korean</a>, without ASCII.
</td></tr>
<tr>
<td><span class="monospaced">ドメイン名例</span></td>
<td><span class="monospaced">eckwd4c7cu47r2wf</span></td>
<td><a href="Japanese_language" title="Japanese language">Japanese</a>, without ASCII.
</td></tr>
<tr>
<td><span class="monospaced">MajiでKoiする5秒前</span></td>
<td><span class="monospaced"><span class="nowrap">MajiKoi5-783gue6qz075azm5e</span></span></td>
<td>Japanese with ASCII.
</td></tr>
<tr>
<td><span class="monospaced">「bücher」</span></td>
<td><span class="monospaced">bcher-kva8445foa</span></td>
<td>Mixed non-ASCII scripts (Latin-1 Supplement and CJK).
</td></tr>
</tbody></table>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Emoji_domain" title="Emoji domain">Emoji domain</a></li>
<li><a href="UTF-5" class="mw-redirect" title="UTF-5">UTF-5</a></li>
<li><a href="UTF-6" class="mw-redirect" title="UTF-6">UTF-6</a></li>
<li><a href="Website_spoofing" title="Website spoofing">Website spoofing</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-rfc3492-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-rfc3492_1-0">^</a></b></span> <span class="reference-text">RFC <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc3492">3492</a>, <i>Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDN)</i>, A. Costello, The Internet Society (March 2003)</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFMaximillian_Laumeister2020" class="citation web cs1">Maximillian Laumeister (18 July 2020). <a rel="nofollow" class="external text" href="https://www.maxlaumeister.com/articles/why-is-it-called-punycode/">"Why Is It Called "Punycode"?"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">13 January</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text">This is true for the first encoded character (or, in terms of RFC 3492, the first "delta"): see RFC 3492, Sec. 6.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text">RFC 3492, Secs. 3.4, 5.</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text">RFC 3492, App. A.</span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFInternet_Assigned_Numbers_Authority2003" class="citation web cs1"><a href="Internet_Assigned_Numbers_Authority" title="Internet Assigned Numbers Authority">Internet Assigned Numbers Authority</a> (2003-02-14). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100427154004/http://www.atm.tut.fi/list-archive/ietf-announce/msg13572.html">"Completion of IANA Selection of IDNA Prefix"</a>. <i>www.atm.tut.fi</i>. Archived from <a rel="nofollow" class="external text" href="http://www.atm.tut.fi/list-archive/ietf-announce/msg13572.html">the original</a> on 2010-04-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2017-09-22</span></span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text">The Punycode in this table was created using the builtin codec "punycode" of the <a href="Python_(programming_language)" title="Python (programming language)">Python programming language</a> version 3.8 (<code>s.encode("punycode")</code>). See talk page.</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://www.rfc-editor.org/rfc/rfc3492.txt">IETF Punycode standard</a></li>
<li><a rel="nofollow" class="external text" href="http://demo.icu-project.org/icu-bin/idnbrowser">ICU IDNA Demonstration</a> An online demonstration of how <a href="International_Components_for_Unicode" title="International Components for Unicode">ICU</a> performs IDN operations</li>
<li><a rel="nofollow" class="external text" href="https://www.mozilla.org/projects/security/tld-idn-policy-list.html">List of TLDs considered by the Mozilla developers to have an effective anti-spoofing policy for name registration</a></li>
<li><a rel="nofollow" class="external text" href="http://blogs.msdn.com/ie/archive/2006/07/31/684337.aspx">IDN and Punycode in IE7</a></li>
<li><a rel="nofollow" class="external text" href="https://www.charset.org/punycode.php">Simple Punycode converter</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-04-30" href="https://en.wikipedia.org/wiki/?title=Punycode&oldid=1288134492">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>